// 1.引入基础模块（必须）
import axios from "axios" //vue框架会自动引入安装的第三方模块(node_modules)
import qs from "qs";


// 2.通过node提供的环境常量动态管理服务端请求域名地址
// 动态process.env.NODE_ENV  development  production
let baseURL = ""
if (process.env.NODE_ENV == "development") {
    baseURL = "http://localhost:3000" //本地服务（测试服务器==>本地 测试服务器==>远程）npm run serve
    // baseURL = "https://api.aslegou.top" //为了测试方便使用远程地址
} else {
    baseURL = "https://api.aslegou.top" //生产服务器==>远程 npm run build
}

// 3.创建实例 设置一些常用的配置项 请求基础域名地址 header  请求方法  请求超时（必须）
const http = axios.create({
    baseURL //请求基础域名地址
})


// 4.设置请求拦截（必须）
http.interceptors.request.use((config) => {
    // console.log('请求数据情况：', config)
    // 触发时机：请求出去之前触发
    // 应用场景：再此可以处理请求数据 header头 token
    // 注意，最后放行返回调整好的请求参数
    let userInfo = localStorage.getItem('userInfo') || ""
    if (userInfo != "") {
        config.headers.Authorization = JSON.parse(userInfo).token
    }
    return config
}, () => {})

// 5.设置响应拦截（必须）
http.interceptors.response.use((res) => {
    // 触发时机：请求请求之后，页面获取结果之前触发
    // 应用场景：根据状态码返回不同的请求结果  
    // 注意，最后放行请求结果
    return res
}, () => {})

// export default http


/**
 * 请求标准风格：
 *  restful风格，一种开发接口书写规范（查看：get 提交：post 删除：delete 修改put）
 *  查看：GET    http://www.gookang.com/tasks
 *  提交：POST   http://www.gookang.com/tasks
 *  删除：delete http://www.gookang.com/tasks
 *  修改：put    http://www.gookang.com/tasks
 */

// -------------------------基于项目方式封装：get post-----------------------------------------

// export const request = (method,url,data) => { 
//     if (method == 'GET') {

//     } else { 

//     }
// }


/**
 * 6.功能：基于axios-get方法查询数据
 * 参数：{
 *      url:"请求数据路径",
 *      params:{}请求参数
 * }
 * 返回结果：promise对象
 * */
export const getData = (url, params = {}) => {
    // 返回的是一个promise对象
    return http.get(url, {
        params
    })
}


/**
 * 7.功能：基于post方法提交数据
 * 参数：{
 *      url:"请求数据路径",
 *      params:{}提交参数
 * }
 * 返回结果：promise对象
 * */
export const postData = (url, params = {}) => {
    // 表单提交数据类型：字段类型数据 文件数据（img file video ）

    // 1.有文件上传(二进制文件流)
    // new FormData()

    // 2.无文件上传 application/x-www-form-urlencoded; 将对象数据转换成key=value格式
    let data = qs.stringify(params)
    return http.post(url, data)
}